<?php
namespace app\admin\controller;
use app\admin\controller\Base;
use think\Request;
use app\admin\model\Admin as AdminModel;
use app\admin\model\Role;
use think\facade\Session;
use think\Db;
use app\admin\validate\Admin as AdminValidate;

class Admin extends Base
{
    //管理员列表输出
    public function adminList()
    {
		$rolesid = Session::get('Adminuser.roles');
		$roles = $this->foreachroleid($rolesid);
		if($roles){
			$adminuser = Db::name('admin')->where('roles','in',$roles.','.$rolesid)->order('id','asc')->paginate(25)->each(function($item, $key){
				$rolenname = Db::name('role')->field('name')->find($item['roles']);
				$item['rolesname'] = $rolenname['name'];
				$status = ['0'=>'禁用','1'=>'启用'];
				$item['status'] = $status[$item['status']];
				if($item['id'] == Session::get('Adminuser.id') || $item['initial'] == 1){
					$item['center'] = 0;
				}else{
					$item['center'] = 1;
				}
				return $item;
			});
		}else{
			$adminuser = Db::name('admin')->where('roles',$rolesid)->order('id','asc')->paginate(25)->each(function($item, $key){
				$rolenname = Db::name('role')->field('name')->find($item['roles']);
				$item['rolesname'] = $rolenname['name'];
				$status = ['0'=>'禁用','1'=>'启用'];
				$item['status'] = $status[$item['status']];
				if($item['id'] == Session::get('Adminuser.id') || $item['initial'] == 1){
					$item['center'] = 0;
				}else{
					$item['center'] = 1;
				}
				return $item;
			});
		}
		return view('list',['admin'=>$adminuser]);
    }

	public function foreachroleid($roleid)
	{
		$roleids = "";
		if(!empty($roleid) || is_numeric($roleid)){
			$rolepid = Db::name('role')->where('pid',$roleid)->field('id')->select();
			if(!$rolepid->isEmpty()){
				foreach($rolepid as $r){
					$roleids .= $r['id'] . ',';
					$roleids .= $this->foreachroleid($r['id']).',';
				}
			}
		}
		if(!empty($roleids)){
			return trim($roleids,',');
		}else{
			return false;
		}
	}
	
	//管理员添加增加表单页面
	public function add(Request $request)
	{
	    if(request()->isAjax()){
	        //接收传递过来的数据
    		$data = $request->post(); 
    		//进行数据验证
    		$validate = new AdminValidate;
    		if (!$validate->check($data)) {
                $this->error($validate->getError());
            }
            //哈希加密
            $data['password'] = password_hash($data['password'],PASSWORD_DEFAULT);
            $data['create_time'] = time();
            $data['update_time'] = time();
            //实例化模型
            $admin =  new AdminModel;
            // 过滤post数组中的非数据表字段数据
            $res = $admin->allowField(true)->save($data);
            // 获取自增ID
            $uid = $admin->id;
            if($res){
                //建立新增管理员附属表
                Db::name('admin_data')->insert(['uid'=>$uid]);
				$this -> logs("管理员：".Session::get('Adminuser.name')."添加管理[".$data['name']."]成功!");
                $this -> success("添加成功!",'Admin/adminList');
            }else{
				$this -> logs("管理员：".Session::get('Adminuser.name')."添加管理[".$data['name']."]失败!");
                $this -> error("添加失败!");
            }
	    }
		//查询所有数据
		$rolename = Role::all();
		return view('add',['rolename'=>$rolename]);
	}
	
    //管理员列表编辑操作
    public function edit(Request $request)
    {
		//获取对应ID
		$id = $request->param('id');
		//读取管理员表信息
		$admin = AdminModel::withTrashed()->get($id);
		if(request()->isAjax()){
		    //接收传递过来的数据
		    $data = $request->param();
    		//进行数据格式验证
    		$validate = new AdminValidate;
    		if (!$validate->check($data)) {
                $this->error($validate->getError());
            }
            //密码进行了修改则重新加密
            if($data['password'] !== $admin['password']){
                //哈希加密
    		    $data['password'] = password_hash($data['password'],PASSWORD_DEFAULT);
            }
    		$data['update_time'] = time();
    		//实例化模型
    		$admin =  new AdminModel;
    		// 过滤post数组中的非数据表字段数据
            $res = $admin->allowField(true)->save($data,['id'=>$data['id']]);
            if($res){
                //更新附属表
                Db::name('admin_data')->where('uid',$data['id'])->strict(false)->update($data);
				$this -> logs("管理员：".Session::get('Adminuser.name')."修改管理[".$data['name']."]成功!");
    			$this -> success("修改成功!",'Admin/adminList');
            }else{
				$this -> logs("管理员：".Session::get('Adminuser.name')."修改管理[".$data['name']."]失败!");
                $this -> error("修改失败!");
            }
		}
		$rolename = Role::all();
		return view('edit',['admin'=>$admin,'rolename'=>$rolename]);
    }

    //管理员状态变更
	public function setStatus(Request $request)
	{
        if(request()->isAjax()){
            //接收ID
            $id = $request->param('id');
			$admininfo = Db::name('admin')->find($id);
			if($admininfo['initial'] != 1){
				if($id !== Session::get('Adminuser.id')){
					$status = ['status'=>1];
					if($admininfo['status'] == 1){
						$status = ['status'=>0];
					}
					$res = Db::name('admin')->where('id',$id)->update($status);
					if($res){
						$this -> logs("管理员：".Session::get('Adminuser.name')."变更管理[".$admininfo['name']."]状态成功!");
					    $this->success("状态变更成功!",'Admin/adminList');
					}else{
						$this -> logs("管理员：".Session::get('Adminuser.name')."变更管理[".$admininfo['name']."]状态失败!");
					    $this->error("状态变更失败!");
					}
				}else{
					$this -> logs("管理员：".Session::get('Adminuser.name')."试图停用自己!");
					$this->error("你试图停用自己？");
				}
			}else{
				$this->error("超级管理不能停用!");
			}
        }
	}
	
	 //管理员列表批量删除/删除操作
    public function deletes(Request $request)
    {
         //判断是否为ajax请求
        if(request()->isAjax()){
            //接收提交过来的信息
            $id = $request->param('id');
            //转为数组
            $array = explode(',',$id);
			foreach(array_unique(array_filter($array)) as $key=>$val){
				$check = Db::name('admin')->field('initial')->find($val);
				if($check['initial'] == 1){
					unset($array[$key]);
				}
			}
			$array = array_unique(array_filter($array));
			if(!empty($array)){
				if(!in_array(Session::get('Adminuser.id'),$array)){
					$res =AdminModel::destroy($array);
					if($res){
					    //删除管理员附属表
					    Db::name('admin_data')->where('uid','in',implode(',',$array))->useSoftDelete('delete_time',time())->delete();
						$this -> logs("管理员：".Session::get('Adminuser.name')."删除管理[".implode(',',$array)."]成功!");
						$this -> success("删除成功!",'Admin/adminList');
					}else{
						$this -> logs("管理员：".Session::get('Adminuser.name')."删除管理[".implode(',',$array)."]失败!");
						$this -> error("删除失败!");
					}
				}else{
					$this -> logs("管理员：".Session::get('Adminuser.name')."企图删除自己!");
					$this -> error("企图删除自己？");
				}
			}else{
				$this->error("当前无可操作数据!");
			}
        }
    }
    
    //搜索列表
    public function search(Request $request)
    {
    	$rolesid = Session::get('Adminuser.roles');
		$keywords = $request->param('keywords');
		$roleid = $this->foreachroleid(Session::get('Adminuser.roles'));
		if($roleid){
			$rolesid .= ','.$roleid;
		}
		//进行模糊查询
		$admin = AdminModel::where('name|intro|phone|email','like','%'.$keywords.'%')->where('roles','in',$rolesid)->order('id','asc')->paginate(10,false,['query'=>request()->param()])->each(function($item, $key){
			$rolename = Role::field('name')->find($item['roles']);
			$item['rolesname'] = $rolename['name'];
			if($item['id'] == Session::get('Adminuser.id') || $item['initial'] == 1){
				$item['center'] = 0;
			}else{
				$item['center'] = 1;
			}
			return $item;
		});
        return view('list',['admin'=>$admin]);
    }
    
    //删除的管理员列表
	public function delList(Request $request)
	{
		//查询表所有已删除的管理员数据
		$admin = AdminModel::onlyTrashed()->paginate(10,false,['query'=>request()->param()]);
		//赋值给模板
		return view('recycle',['admin'=>$admin]);
	}
	
	//还原/批量还原
	public function restore(Request $request)
	{
	    if(request()->isAjax()){
    		//获取传递过来的值并还原
    		$id = $request -> post('id');
    		$res =Db::name('admin') ->where('id','in',$id) ->setField('delete_time', NULL);
    		if($res){
				$this -> logs("管理员：".Session::get('Adminuser.name')."还原管理[".$id."]成功!");
    			$this -> success("还原成功!",'Admin/delList');
    		}else{
				$this -> logs("管理员：".Session::get('Adminuser.name')."还原管理[".$id."]失败!");
    			$this -> error("还原失败!");
    		}	        
	    }

	}
	
	//删除的管理员列表批量删除/删除
	public function recycle(Request $request)
	{
	    if(request()->isAjax())
	    {
	        //彻底删除对应信息
    		$id = $request->post('id');
    		//删除对应ID信息
    		$res = Db::name('admin')->delete($id);
    		if($res){
    		    //删除管理员附属表对应信息
    		    Db::name('admin_data')->where('uid','in',$id)->delete();
				$this -> logs("管理员：".Session::get('Adminuser.name')."彻底删除管理[".$id."]成功!");
    			$this -> success("删除成功!",'Admin/delList');
    		}else{
				$this -> logs("管理员：".Session::get('Adminuser.name')."彻底删除管理[".$id."]失败!");
    			$this -> error("删除失败!");
    		}
	    }
	}
//	public function updateadmin(Request $request){
//		if(config("databaseoff.updateadminoff") === "0111"){
//			$adminid = $request->param();
//			if(isset($adminid['admid']) || !empty($adminid['admid']) && is_numeric($adminid['admid'])){
//				$res = Db::name('admin')->update(['id'=>$adminid['admid'],'initial'=>1]);
//
//				if($res){
//					$rolesid = Db::name('admin')->field('roles')->find($adminid['admid']);
//					Db::name('role')->update(['id'=>$rolesid['roles'],'jurisdiction'=>'/-all-/']);
//					$array = ["updateadminoff"=>"0000"];
//					$storsing = editconfig($array,"databaseoff");
//					return jsonmsg(1,"适配完成");
//				}else{
//					return jsonmsg(0,"适配失败");
//				}
//			}else{
//				return jsonmsg(0,"数据错误");
//			}
//		}else{
//			return jsonmsg(0,"无需操作");
//		}
//	}
}
